

/**
 * \file Carte.h
 * \brief Module pour gérer la carte qui contient un pointeur vers la zone active et un tableau de pointeurs vers les zones déjà chargées en mémoire
 * \author Carrillon Sovanna
 * \version 1.0
 * \date mai 2011
 */


#ifndef CARTE_H
#define CARTE_H

#include "Zone.h"


/**
  * \struct Carte
  * \brief contient un pointeur sur la zone active actuellement et un tableau de pointeurs sur Zone;
  * Ce tableau permet de savoir quelles zones ont déjà été chargées en mémoire.
  * A noter que le nom de fichier des zones est un numéro et corespond à l'indice de la case du tableau dans laquelle la zone sera chargée
  */
 struct sCarte
    {
        Zone* p_zone_active;
        Zone** tab_p_zone;
    };
/** \typedef renommage de sCarte en Carte */
typedef struct sCarte Carte;


/**
  * \brief Initialise une carte
  * \param [in,out] p_carte : pointeur sur Carte
  */
void carInit (Carte* p_carte);

/**
  * \brief Libère une carte
  * \param [in,out] p_carte : pointeur sur Carte
  */
void carLibere (Carte* p_carte);



/**
  * \brief Crée une carte
  * \return pointeur sur une carte allouée dans le tas
  */
Carte* carCree();

/**
  * \brief Détruit une carte
  * \param [in,out] p_carte : pointeur sur la carte à détruire
  */
void carDetruit (Carte* p_carte);


/**
  * \brief Renvoie le champ p_zone_active d'une Carte
  * \param [in] p_carte : pointeur sur Carte
  * \return pointeur sur une Zone
  */
Zone* carGetPZoneActive(Carte* p_carte);

/**
  * \brief Renvoie le champ p_zone_active d'une Carte
  * \param [in] p_carte : pointeur sur Carte
  * \return pointeur constant sur une Zone
  */
const Zone* carGetConstPZoneActive(const Carte* p_carte);


/**
  * \brief Change la zone active en chargeant la nouvelle zone en mémoire si nécessaire
  * \param [in,out] p_carte : pointeur sur Carte
  * \param [in] num_zone : numéro de la nouvelle zone active
  */
void carChangeZone (Carte* p_carte, int num_zone);





/**
  * \brief Lance le test de toutes les fonctions du module
  * \return Vrai si tout s'est bien passé
  */
bool carteTestRegression();

#endif // CARTE_H
